NexusPi Git Node
DeviceUID.h 8a8262ee4564d973430cbd064c0d0e46deb3ac8e (8a8262ee) Text, 1.56 KB
T8b949e// Hardware-rooted device unique ID.
T8b949e//
T8b949e// Derived at boot from factory-burned identifiers — no provisioning required:
T8b949e// ESP32: BT MAC (efuse), via esp_read_mac(mac, ESP_MAC_BT)
T8b949e// nRF52: FICR DEVICEADDR, with the 0xC0 BLE static-random marker applied
T8b949e// so the value matches the address advertised over BLE.
T8b949e//
T8b949e// 6 bytes / 48 bits — the smallest size that preserves the full unique range
T8b949e// of both sources. Independent of ADDR_SERIAL and rnodeconf provisioning.
Tff7b72#Tff7b72ifndef DEVICEUID_H
Tff7b72#Tff7b72define DEVICEUID_H
Tff7b72#Tff7b72include T8b949e<stdint.h>
Tff7b72#Tff7b72include T8b949e<stdio.h>
Tff7b72#Tff7b72include T8b949e"Boards.h"
Tff7b72#Tff7b72if MCU_VARIANT == MCU_ESP32
Tff7b72#Tff7b72if __has_include("esp_mac.h")
Tff7b72#Tff7b72include T8b949e"esp_mac.h"
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72include T8b949e"esp_system.h"
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72define DEVICE_UID_LEN 6
Tff7b72#Tff7b72define DEVICE_UID_STR_LEN 13 T8b949e// 12 hex chars + NUL
Tffa657uint8_t Te6edf3device_uidTb4b4b4[Te6edf3DEVICE_UID_LENTb4b4b4] Tff7b72= Tb4b4b4{T79c0ff0Tb4b4b4}Tb4b4b4;
Tffa657char Te6edf3device_uid_strTb4b4b4[Te6edf3DEVICE_UID_STR_LENTb4b4b4] Tff7b72= Tb4b4b4{T79c0ff0Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffdevice_uid_initTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if MCU_VARIANT == MCU_ESP32
Te6edf3esp_read_macTb4b4b4(Te6edf3device_uidTb4b4b4, Te6edf3ESP_MAC_BTTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_NRF52
Tffa657uint32_t Te6edf3lo Tff7b72= Te6edf3NRF_FICRTff7b72-Tff7b72>Te6edf3DEVICEADDRTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Tffa657uint32_t Te6edf3hi Tff7b72= Te6edf3NRF_FICRTff7b72-Tff7b72>Te6edf3DEVICEADDRTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4;
Te6edf3device_uidTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3lo Tb4b4b4) Tff7b72& T79c0ff0xFFTb4b4b4;
Te6edf3device_uidTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3lo Tff7b72>Tff7b72> T79c0ff8Tb4b4b4) Tff7b72& T79c0ff0xFFTb4b4b4;
Te6edf3device_uidTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3lo Tff7b72>Tff7b72> T79c0ff16Tb4b4b4) Tff7b72& T79c0ff0xFFTb4b4b4;
Te6edf3device_uidTb4b4b4[T79c0ff3Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3lo Tff7b72>Tff7b72> T79c0ff24Tb4b4b4) Tff7b72& T79c0ff0xFFTb4b4b4;
Te6edf3device_uidTb4b4b4[T79c0ff4Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3hi Tb4b4b4) Tff7b72& T79c0ff0xFFTb4b4b4;
Te6edf3device_uidTb4b4b4[T79c0ff5Tb4b4b4] Tff7b72= Tb4b4b4(Tb4b4b4(Te6edf3hi Tff7b72>Tff7b72> T79c0ff8Tb4b4b4) Tff7b72& T79c0ff0xFFTb4b4b4) Tff7b72| T79c0ff0xC0Tb4b4b4;
Tff7b72#Tff7b72endif
Te6edf3snprintfTb4b4b4(Te6edf3device_uid_strTb4b4b4, Te6edf3DEVICE_UID_STR_LENTb4b4b4,
Ta5d6ff"Ta5d6ff%02X%02X%02X%02X%02X%02XTa5d6ff"Tb4b4b4,
Te6edf3device_uidTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3device_uidTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3device_uidTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4,
Te6edf3device_uidTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4, Te6edf3device_uidTb4b4b4[T79c0ff4Tb4b4b4]Tb4b4b4, Te6edf3device_uidTb4b4b4[T79c0ff5Tb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif T8b949e// DEVICEUID_H
Served by rngit 1.5.2 - Generated in 0.01s